﻿#ifndef TCPSERVER_H
#define TCPSERVER_H

#include <QWidget>
#include<QUdpSocket>
#include<QTcpServer>
#include<QTcpSocket>
#include<QCloseEvent>
/*************************************************
  Class:       TcpServer
  Description: 这是服务器类，可以向客户端发送消息，接收
               文件，但是目前只能接收文本文件，然后服务
               端会读取文本内容并显示在内容框内，不知
               为何，客户端一定要后打开。只有先打开服务
               端才能连接成功。发送消息用的是UDP通信方式，
               发送文件用的是TCP通信方式。开启窗口自动
               连接。
  Auther:      林锦涛
  Time:        2021-1-31 14:24:28
*************************************************/

namespace Ui {
class TcpServer;
}

class TcpServer : public QWidget
{
    Q_OBJECT

public:
    explicit TcpServer(QWidget *parent = nullptr);
    ~TcpServer();


    /*************************************************
      Description:    udp接收信息处理函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void dealrecvMsg();

    /*************************************************
      Description:    tcp处理新连接函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void dealNewconnection();

    /*************************************************
      Description:    tcp接收信息处理函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void tcpRecvMsg();

    /*************************************************
      Description:    断开连接处理函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void dealDisconnect();

    /*************************************************
      Description:    重写关闭事件函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void closeEvent(QCloseEvent *e);

private slots:
    /*************************************************
      Description:    发送消息按钮函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void on_buttonSend_clicked();

private:
    Ui::TcpServer *ui;

    QUdpSocket *udpSocket;
    QTcpServer *tcpServer;
    QTcpSocket *tcpSocket;
    QString fileName; //文件名字
    qint64 fileSize;  //文件大小
    qint64 recvSize;  //接收文件大小
};

#endif // TCPSERVER_H
